package org.dudemonkey.jvm;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

/**
 * -Xms1m -Xmx10m -XX:HeapDumpOnOutOfMemoryError
 */
public class OOMObject {
    public String getBigText(){
        File file = new File("F:\\workspace\\idea_workspace\\qingyunian.txt");
        FileInputStream fis = null;
        String ss= null;
        try {
            Thread.sleep(10*1000);
            fis = new FileInputStream(file);
            //创建File类对象
//            File file = new File("F:\\fileInputStream\\a.txt");
            //创建FileInputStream对象，并关联对应的文件，创建对象的时候会出现异常
//            FileInputStream fis = new FileInputStream(file);
            //我们现在可以通过FileInputStream对象对文件的内容进行读取了
            /*************第一种方式开始代码｛一次读取一个｝****************/
            //使用的时候请关闭方式二的代码
		int charcontent;
            //循环一个一个读取｛当读取不到的时候会返回-1所以可以使用这个做循环的条件｝
            //可能有人觉得奇怪，我文件里面的内容是字母，为什么可以使用int类型接收呢？
            //答案：读取的时候获取到的是ASCII碼｛可以System.out.println(charcontent);不转换输出试一下｝，
            // 所以我们需要转换
//		while ((charcontent = fis.read()) != -1) {
//            char ch1 = (char) charcontent;
//			System.out.println(ch1);
//            ss+=String.valueOf(ch1);
////            System.out.println(String.format("ascii code : %d , char code : %s , string : %s", charcontent,ch1,ss));
//
//		}
//		fis.close();//关闭流
            /*************第一种方式结束代码****************/

            /*************第二种方式开始代码｛一次读取多个放到字节数组中｝****************/
            //这种方式效率更加高，因为不用频繁的操作硬盘，一次就读了1M
//            byte[] bytes = new byte[1024];//为了读取方便，一次读取1M，
            //将读取到的数据保存到bytes这个字节数组中
            int length;
            byte[] bytes = new byte[1024];
            while ((length = fis.read(bytes)) != -1) {
                String s1=new String(bytes, 0, length);
                System.out.print(s1);//将数据变为字符串输出
                ss+=s1;
            }
            fis.close();//关闭流
            //int read = fis.read(bytes);//返回读取到的长度｛也是字节数组中的长度｝
            /*************第二种方式结束代码****************/

        } catch (Exception e) {
            e.printStackTrace();
        }
        return ss;
    }
}
